<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Models\CouponCode;
use Faker\Generator as Faker;

$factory->define(CouponCode::class, function (Faker $faker) {
	// 首先随机取得一个类型
	$type  = $faker->randomElement(array_keys(CouponCode::$typeMap));
	// 根据取得的类型生成对应折扣
	$value = $type === CouponCode::TYPE_FIXED ? random_int(1, 200) : random_int(1, 50);

	// 如果是固定金额，则最低订单金额必须要比优惠金额高 0.01 元
	if ($type === CouponCode::TYPE_FIXED) {
	    $minAmount = $value + 0.01;
	} else {
	    // 如果是百分比折扣，有 50% 概率不需要最低订单金额
	    if (random_int(0, 100) < 50) {
	        $minAmount = 0;
	    } else {
	        $minAmount = random_int(100, 1000);
	    }
	}

	return [
	    'name'       => join(' ', $faker->words), // 随机生成名称
	    'code'       => CouponCode::findAvailableCode(), // 调用优惠码生成方法
	    'type'       => $type,
	    'value'      => $value,
	    'total'      => 1000,
	    'used'       => 0,
	    'min_amount' => $minAmount,
	    'not_before' => null,
	    'not_after'  => null,
	    'enabled'    => true,
	];
});
